要对nginx进行监控,都需要做什么。
- 开启nginx监控
- 编写脚本来进行数据采集
- 设置用户自定义参数
- 重启zabbix-agent
- 添加item
- 创建图形
- 创建触发器
- 创建模版
编写数据采集脚本
nginx在10.8.8.22上启用的,因此脚本要上传到10.8.8.22上。
修改 zabbix_agentd.conf,把 Include 修改为只引入后缀名为.conf 的文件,更严
谨,而且除了配置文件之外,脚本也能放到这里。不会影响受到影响
1
| Include=/etc/zabbix/zabbix_agentd.d/*.conf
|
编写监控脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #!/bin/bash NGINX_PORT=8080 NGINX_COMMAND=$1 nginx_active(){ /usr/bin/curl "http://10.8.8.22:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}' } nginx_reading(){ /usr/bin/curl "http://10.8.8.22:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}' } nginx_writing(){ /usr/bin/curl "http://10.8.8.22:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}' } nginx_waiting(){ /usr/bin/curl "http://10.8.8.22:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } nginx_accepts(){ /usr/bin/curl "http://10.8.8.22:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}' } nginx_handled(){ /usr/bin/curl "http://10.8.8.22:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}' } nginx_requests(){ /usr/bin/curl "http://10.8.8.22:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}' } case $NGINX_COMMAND in active) nginx_active; ;; reading) nginx_reading; ;; writing) nginx_writing; ;; waiting) nginx_waiting; ;; accepts) nginx_accepts; ;; handled) nginx_handled; ;; requests) nginx_requests; esac
|
给脚本添加执行权限
1
| chmod +x zabbix_nginx.sh
|
重要的是这个脚本有zabbix的执行权限,然后它会在运行的时候在tmp目录下生成tmp文件。
测试一下这个文件
1 2 3 4 5 6
| [root@zabbix-server zabbix_agentd.d] 1 [root@zabbix-server zabbix_agentd.d] 0 [root@zabbix-server zabbix_agentd.d] 1
|
接下来再查看一下nginx的配置文件关于状态显示的部分
1 2 3 4 5 6 7
| location /nginx_status { stub_status on; access_log off; allow 10.8.8.0/24; allow 192.168.5.0/24; deny all; }
|
注:添加权限的设置目的是更安全
编写配置文件
1 2
| [root@zabbix-server zabbix_agentd.d] UserParameter=nginx_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_nginx.sh "$1"
|
延伸:当我们要传递多个参数的时候可以使用“[*]”的写法,比如:
1
| UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/zabbix_nginx.sh "$1" "$2" "$3"
|
这里的 linux.status[*]的写法其实意思就是我可以传递多个参数
那么在使用 zabbix_get 的时候就可以通过这个来传递多个参数,比如:
配置完成以后,进行get测试
1 2
| [root@zabbix-server zabbix_agentd.d] 1
|
通过检测,证明没有问题,接下来就是要把这些监控的内容全部添加到一个模版中去。
添加一个模版
操作步骤:configuration–>template–>create template
添加监控项
操作步骤:configuration–>templates–>刚才加的模版–>item–>create item
application就是item的组
当然监控项不止这一个,可以使用简便的方法实现这个items的添加,就是对刚才已经添加好的进行克隆。
单击刚才添加的监控项,拉到最下面,然后有一个clone。全部添加好以后如图所示
添加触发器
触发器是当达成某一个条件以后会执行某一个动作,比如cpu使用率达到多少以后要进行报警,报警以后要执行发邮件 ,或者发微信、发短信的操作。
首先看一下报警脚本的存放位置
1 2 3 4
| [root@zabbix-server ~]# cat /etc/zabbix/zabbix_server.conf | grep "Alert*" ### Option: AlertScriptsPath # AlertScriptsPath=${datadir}/zabbix/alertscripts AlertScriptsPath=/usr/lib/zabbix/alertscripts
|
用shell实现一个简单报警的步骤
- 报警脚本存放的位置
- 要支持三个参数,收件人、主题、内容
- 执行权限
- web界面添加
- 修改action
这里模拟一个发短信的报警脚本。将报警内容输出到/tmp/sms.log,也可以通过脚本实现发送邮件等。关于短信发送的相关信息可以参考阿里大于,在阿里大于的帮助平台提供有短信发送的API以及相关参数。
编写报警脚本
1 2 3 4 5 6 7 8 9 10 11
| [root@zabbix-server ~] [root@zabbix-server alertscripts] #!/bin/bash ALERT_TO=$1 ALERT_TITLE=$2 ALERT_BODY=$3 echo $ALERT_TO >> /tmp/sms.log echo $ALERT_TITLE >> /tmp/sms.log echo $ALERT_BODY >> /tmp/sms.log 当我们接收到报警脚本以后会把上面的内容追加到/tmp/sms.log 中。 [root@zabbix-server tmp]
|
添加告警类型:
操作步骤:administrator–>media type–>add
操作步骤:configuration–>actions–>operations
修改用户的media为SMS
添加触发器:这里添加一个触发器,当nginx的active nember大于3的时候就报警,之所有设置大于3是因为方便看到结果。
操作步骤:选择configuration,然后选择host对应的主机,直接选择触发器,创建触发器,起名字
expression表达式既可以自己写也可以通过add来进行添加自动生成
观察右上角的报警,通过ab进行压力测试以后可以很快的达成我们想要的结果
然后查看tmp下是否有sms.log文件并且文件中是否有内容
1 2 3 4 5 6 7 8 9 10 11
| [root@zabbix-server tmp] Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*ame): Linux mobanji 3.10.0-514.el7.x86_64 xxxxx.@qq.com PROBLEM: Nginx Active>3 Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*tatus[active]): 4 xxxxx.@qq.com PROBLEM: Nginx Active>3 Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*tatus[active]): 4 xxxxx.@qq.com PROBLEM: Nginx Active>3 Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*tatus[active]): 4
|
可以发现,确实是执行报警脚本了,现在把压力测试关掉
1 2 3 4 5 6
| xxxxx.@qq.com PROBLEM: Nginx Active>3 Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*tatus[active]): 4 xxxxx.@qq.com OK: Nginx Active>3 Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*tatus[active]): 1
|
发现故障恢复了也会发送相关的信息
在实际运维的过程当中,应该对需要发送的信息进行相关的优化,因为国内一条短信的长度是有限制的,一个汉字和一个字母都算作一个字符。超过限制就会分为两条甚至多条进行发送,因此要把关键的信息挑出来
查看日志信息
1 2 3 4 5 6
| xxxxx.@qq.com 状态:PROBLEM 主机:(Zabbix server 监控项:nginx_status[active]): 5 xxxxx.@qq.com 状态:OK 主机:(Zabbix server 监控项:nginx_status[active]): 1
|
添加图形
然后添加完图形以后就可以对模版进行应用了。
点击到对应的主机–>template–>搜索创建的模版–>add–>update
添加完成模版以后添加图形:模版–>创建的模版–>graphs–>create graphs
模版的导出
configuration–>勾选模版–>选择最下面的export–>导出
因为zabbix所有导出的模版都是一个名字,因此对于导出的模版要进行重命名
模版的导入
在模版界面的右上角
进行压力测试